#!/bin/bash
#
# Unix (macOS/Linux) launcher for Juggling Lab application
#
# Copyright 2002-2025 Jack Boyce and the Juggling Lab contributors
# Released under the GNU General Public License v2

DIR=$(dirname "$0")

# Check if an adequate version of Java is installed
if type java >/dev/null 2>&1; then
    _java=java
elif [[ -n "${JAVA_HOME}" ]] && [[ -x "${JAVA_HOME}/bin/java" ]]; then
    _java="${JAVA_HOME}/bin/java"
else
    echo >&2 "Java not found. Install Java 11 or higher and ensure \$JAVA_HOME"
    echo >&2 "environment variable is set."
    exit 1
fi

if [[ "$_java" ]]; then
    version=$("$_java" -version 2>&1 | awk -F '"' '/version/ {print $2}')
    version1=$(echo "$version" | awk -F. '{printf("%03d%03d",$1,$2);}')
    if [ "$version1" -lt "011000" ]; then
        echo >&2 "Java installed is version ${version}; need Java 11 or higher to run."
        exit 1
    fi
fi

# Launch the jar
JL_JAR="${DIR}/JugglingLab.jar"

if [ -a "${JL_JAR}" ]; then
    if [[ "$OSTYPE" == "darwin"* ]]; then
        architecture=$(uname -m)
        if [[ "$architecture" == "arm64" ]]; then
            ortools_path="${DIR}/ortools-lib/ortools-darwin-aarch64"
        elif [[ "$architecture" == "x86_64" ]]; then
            ortools_path="${DIR}/ortools-lib/ortools-darwin-x86-64"
        fi
        "$_java" -cp "${JL_JAR}" -Xss2048k \
            -Djava.library.path="${ortools_path}" \
            --enable-native-access=ALL-UNNAMED jugglinglab.JugglingLab
    else
        # include both Arm and x86 versions of OR-Tools; JRE will choose correct one at runtime
        "$_java" -cp "${JL_JAR}" -Xss2048k \
            -Djava.library.path="${DIR}/ortools-lib/ortools-linux-x86-64:${DIR}/ortools-lib/ortools-linux-aarch64" \
            --enable-native-access=ALL-UNNAMED jugglinglab.JugglingLab
    fi
else
    echo >&2 "\"JugglingLab.jar\" not found in same directory as this script."
fi
